home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
HPAVC
/
HPAVC CD-ROM.iso
/
TRISSRC.ZIP
/
hiscore.c
< prev
next >
Wrap
C/C++ Source or Header
|
1996-05-19
|
6KB
|
346 lines
/*********************************/
/* PCTRIS - Highscoreroutinen */
/*********************************/
#include <stdlib.h>
#include <string.h>
#include <dn.h>
#include <key.h>
#include "DEFS.H"
#include "VARS.H"
#define HSCREINTRAEGE 10
/* globale Variablen */
struct
{
int punkte;
int level;
int reihen;
char name[30];
} hscr_eintrag[HSCREINTRAEGE];
BOOLEAN key_pressed;
/* Funktionsprototypen */
void highscore(void);
/* Funktionen */
void highscore_load(void)
{
FILE *datei;
int i;
datei = fopen("HISCORE.DAT", "rb");
if(!datei)
{
/* neu erzeugen */
datei = fopen("HISCORE.DAT", "wb");
for(i = 0; i < HSCREINTRAEGE; i++)
{
hscr_eintrag[i].punkte = 1000 - i * 50;
hscr_eintrag[i].level = 0;
hscr_eintrag[i].reihen = 0;
strcpy(hscr_eintrag[i].name, "NOONE");
}
fwrite(hscr_eintrag, sizeof(hscr_eintrag[0]), HSCREINTRAEGE, datei);
fclose(datei);
}
else
{
fread(hscr_eintrag, sizeof(hscr_eintrag[0]), HSCREINTRAEGE, datei);
fclose(datei);
}
}
void highscore_save(void)
{
FILE *datei;
datei = fopen("HISCORE.DAT", "wb");
if(datei)
{
fwrite(hscr_eintrag, sizeof(hscr_eintrag[0]), HSCREINTRAEGE, datei);
fclose(datei);
}
}
void get_string(char *str)
{
if(keyTest(KEY_A))
{
if(!key_pressed)
strcat(str, "A");
key_pressed = TRUE;
}
else if(keyTest(KEY_B))
{
if(!key_pressed)
strcat(str, "B");
key_pressed = TRUE;
}
else if(keyTest(KEY_C))
{
if(!key_pressed)
strcat(str, "C");
key_pressed = TRUE;
}
else if(keyTest(KEY_D))
{
if(!key_pressed)
strcat(str, "D");
key_pressed = TRUE;
}
else if(keyTest(KEY_E))
{
if(!key_pressed)
strcat(str, "E");
key_pressed = TRUE;
}
else if(keyTest(KEY_F))
{
if(!key_pressed)
strcat(str, "F");
key_pressed = TRUE;
}
else if(keyTest(KEY_G))
{
if(!key_pressed)
strcat(str, "G");
key_pressed = TRUE;
}
else if(keyTest(KEY_H))
{
if(!key_pressed)
strcat(str, "H");
key_pressed = TRUE;
}
else if(keyTest(KEY_I))
{
if(!key_pressed)
strcat(str, "I");
key_pressed = TRUE;
}
else if(keyTest(KEY_J))
{
if(!key_pressed)
strcat(str, "J");
key_pressed = TRUE;
}
else if(keyTest(KEY_K))
{
if(!key_pressed)
strcat(str, "K");
key_pressed = TRUE;
}
else if(keyTest(KEY_L))
{
if(!key_pressed)
strcat(str, "L");
key_pressed = TRUE;
}
else if(keyTest(KEY_M))
{
if(!key_pressed)
strcat(str, "M");
key_pressed = TRUE;
}
else if(keyTest(KEY_N))
{
if(!key_pressed)
strcat(str, "N");
key_pressed = TRUE;
}
else if(keyTest(KEY_O))
{
if(!key_pressed)
strcat(str, "O");
key_pressed = TRUE;
}
else if(keyTest(KEY_P))
{
if(!key_pressed)
strcat(str, "P");
key_pressed = TRUE;
}
else if(keyTest(KEY_Q))
{
if(!key_pressed)
strcat(str, "Q");
key_pressed = TRUE;
}
else if(keyTest(KEY_R))
{
if(!key_pressed)
strcat(str, "R");
key_pressed = TRUE;
}
else if(keyTest(KEY_S))
{
if(!key_pressed)
strcat(str, "S");
key_pressed = TRUE;
}
else if(keyTest(KEY_T))
{
if(!key_pressed)
strcat(str, "T");
key_pressed = TRUE;
}
else if(keyTest(KEY_U))
{
if(!key_pressed)
strcat(str, "U");
key_pressed = TRUE;
}
else if(keyTest(KEY_V))
{
if(!key_pressed)
strcat(str, "V");
key_pressed = TRUE;
}
else if(keyTest(KEY_W))
{
if(!key_pressed)
strcat(str, "W");
key_pressed = TRUE;
}
else if(keyTest(KEY_X))
{
if(!key_pressed)
strcat(str, "X");
key_pressed = TRUE;
}
else if(keyTest(KEY_Y))
{
if(!key_pressed)
strcat(str, "Y");
key_pressed = TRUE;
}
else if(keyTest(KEY_Z))
{
if(!key_pressed)
strcat(str, "Z");
key_pressed = TRUE;
}
else if(keyTest(KEY_SPACE))
{
if(!key_pressed)
strcat(str, " ");
key_pressed = TRUE;
}
else if(keyTest(KEY_BACKSPACE))
{
if(!key_pressed)
if(strlen(str) > 0)
str[strlen(str) - 1] = 0;
key_pressed = TRUE;
}
else
key_pressed = FALSE;
}
void highscore_eintragen(void)
{
int i, pos;
long t;
pos = -1;
for(i = 0; i < HSCREINTRAEGE; i++)
if(hscr_eintrag[i].punkte < spieler[0].punkte)
{
pos = i;
break;
}
if(pos != -1)
{
// alte runterkopieren
for(i = HSCREINTRAEGE - 2; i >= pos; i--)
hscr_eintrag[i + 1] = hscr_eintrag[i];
hscr_eintrag[pos].punkte = spieler[0].punkte;
hscr_eintrag[pos].level = spieler[0].level;
hscr_eintrag[pos].reihen = spieler[0].reihen;
strcpy(hscr_eintrag[pos].name, "");
// und Eingabe
key_pressed = FALSE;
t = timer();
do
{
if(timer() - t > 0)
{
t = timer();
get_string(hscr_eintrag[pos].name);
putvollbild(hintergrund);
put_text(&schrift, screen_width / 4, screen_height / 2 - 1 * schrift.char_h, "HISCORE - ENTER YOUR NAME");
put_text(&schrift, screen_width / 4, screen_height / 2 + 1 * schrift.char_w, hscr_eintrag[pos].name);
Copy2Screen();
}
}
while(!keyTest(KEY_ENTER));
}
}
void highscore_put(void)
{
int i;
char txt[80], str[10];
for(i = 0; i < HSCREINTRAEGE; i++)
{
itoa(i + 1, str, 10);
strcpy(txt, str);
strcat(txt, ". ");
itoa(hscr_eintrag[i].punkte, str, 10);
strcat(txt, str);
strcat(txt, " PUNKTE, ");
itoa(hscr_eintrag[i].level, str, 10);
strcat(txt, str);
strcat(txt, ". LEVEL, ");
itoa(hscr_eintrag[i].reihen, str, 10);
strcat(txt, str);
strcat(txt, " REIHEN, ");
strcat(txt, hscr_eintrag[i].name);
put_text(&schrift, screen_width / 2 - strlen(txt) * schrift.char_w / 2, screen_height / 2 - HSCREINTRAEGE * schrift.char_h + i * 2 * schrift.char_h, txt);
}
}
void highscore(void)
{
long t;
while(keyTest(KEY_ENTER) || keyTest(KEY_ESC) || keyTest(KEY_SPACE))
;
highscore_load();
highscore_eintragen();
while(keyTest(KEY_ENTER))
;
t = timer();
do
{
if(timer() - t > 0)
{
t = timer();
putvollbild(hintergrund);
highscore_put();
Copy2Screen();
}
}
while(!keyTest(KEY_ESC) && !keyTest(KEY_ENTER) && !keyTest(KEY_SPACE));
// if(keyTest(KEY_ESC))
// ende = TRUE;
highscore_save();
while(keyTest(KEY_ENTER) || keyTest(KEY_ESC) || keyTest(KEY_SPACE))
;
}